gusucode.com > MATLAB神经网络多个案例分析及详细源代码 > 源程序/案例15 SVM神经网络的信息粒化时序回归预测/FIG_D.m
function [low,R,up]=FIG_D(XX,MFkind,win_num) % by Li Yang BNU MATH 05 Email:farutoliyang@gmail.com QQ:516667408 % last modified 2009.2.25 %modified IG based on Pedry by Keqiang Dong %output %low:low bounds %R:representatives %up:up bounds %input %X:times series waited to be IG %MFkind:the kind of membership function %triangle trapezoid asygauss asyparabola %win_num:number of windows %% if nargin < 3 win_num = 10; end if nargin < 2 MFkind = 'trapezoid'; end [d1,d2] = size(XX); X = sort(XX); switch MFkind % trapezoid case('trapezoid') if win_num == 1 if mod(d2,2) ~= 0 m = X( (d2+1)/2 ); n = X( (d2+1)/2 ); mflag = (d2+1)/2; nflag = (d2+1)/2; else m = X( d2/2 ); n = X( (d2+2)/2 ); mflag = d2/2; nflag = (d2+2)/2; end R(1,1) = m; R(2,1) = n; k1 = mflag; k2 = d2 - nflag+1; c1 = ( sum(X(1:k1)) )/k1; c2 = ( sum(X(nflag:d2)) )/k2; low = 2*c1 - m; up = 2*c2 - n; else low = []; R = []; up = []; k = floor(d2/win_num); for i = 1:(win_num-1) [l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1); low = [low,l]; R = [R,r]; up = [up,u]; end [l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1); low =[low,l]; R = [R,r]; up = [up,u]; end %% triangle case('triangle') if win_num == 1 R = median(X); m = median(X); n = median(X); mflag = floor(d2/2); nflag = ceil(d2/2); k1 = mflag; k2 = d2-nflag+1; c1 = ( sum(X(1:k1)) )/k1; c2 = ( sum(X(nflag:d2)) )/k2; low = 2*c1 - m; up = 2*c2 - n; else low = []; R = []; up = []; k = floor(d2/win_num); for i = 1:(win_num-1) [l,r,u]=FIG_D(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1); low = [low,l]; R = [R,r]; up = [up,u]; end [l,r,u] = FIG_D(XX( (1+(win_num-1)*k):d2 ),MFkind,1); low =[low,l]; R = [R,r]; up = [up,u]; end %% asygauss case('asygauss') %这个与基于Pedrycz的是一样的,因为高斯型的核函数无法修改 if win_num == 1 R = median(X); m = median(X); n = median(X); mflag = floor(d2/2); nflag = ceil(d2/2); a_final = 0; Qa_final = 0; for index = 1:( mflag-1 ) a = X(index); Qa=0; x = X( 1:(mflag-1) ); y = (x<=m).*(exp(-(x-m).^2/a^2) ); Qa = sum(y); Qa = Qa/(m-a); if Qa>=Qa_final Qa_final = Qa; a_final = a; end end low = a_final; b_final = 0; Qb_final = 0; for index = ( nflag+1 ):d2 b = X(index); Qb = 0; x = X( (nflag+1):d2 ); y = (x>=m).*(exp(-(x-m).^2/b^2) ); Qb = sum(y); Qb = Qb/(b-n); if Qb>=Qb_final Qb_final = Qb; b_final = b; end end up = b_final; else low = []; R = []; up = []; k = floor(d2/win_num); for i = 1:(win_num-1) [l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1); low = [low,l]; R = [R,r]; up = [up,u]; end [l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1); low =[low,l]; R = [R,r]; up = [up,u]; end %% asyparabola case('asyparabola') if win_num == 1 R = median(X); m = median(X); n = median(X); mflag = floor(d2/2); nflag = ceil(d2/2); a_final = 0; Qa_final = 0; for index = 1:( mflag-1 ) a = X(index); Qa=0; x = X( 1:( mflag-1) ); y=(x<=m).*(1-(m-x).^2/(m-a)^2); Qa = sum(y); Qa = Qa/(m-a); if Qa>=Qa_final Qa_final = Qa; a_final = a; end end low = a_final; b_final = 0; Qb_final = 0; for index = ( nflag+1 ):d2 b = X(index); Qb = 0; x = X( (nflag+1):d2 ); y=(x>=m).*(1-(m-x).^2/(m-b)^2); Qb = sum(y); Qb = Qb/(b-n); if Qb>=Qb_final Qb_final = Qb; b_final = b; end end up = b_final; else low = []; R = []; up = []; k = floor(d2/win_num); for i = 1:(win_num-1) [l,r,u]=FIG_P(XX( (1+(i-1)*k):(k+(i-1)*k) ),MFkind,1); low = [low,l]; R = [R,r]; up = [up,u]; end [l,r,u] = FIG_P(XX( (1+(win_num-1)*k):d2 ),MFkind,1); low =[low,l]; R = [R,r]; up = [up,u]; end end